home *** CD-ROM | disk | FTP | other *** search
/ Aminet 51 / Aminet 51 (2002)(GTI - Schatztruhe)[!][Oct 2002].iso / Aminet / util / arc / xadmasterdev.lha / xad / Sources / clients / xadConvName.c < prev    next >
Encoding:
C/C++ Source or Header  |  2002-08-20  |  1.3 KB  |  65 lines

  1. #ifndef XADMASTER_XADCONVNAME_C
  2. #define XADMASTER_XADCONVNAME_C
  3.  
  4. /* Programmheader
  5.  
  6.     Name:        xadConvName.c
  7.     Main:        xadmaster
  8.     Versionstring:    $VER: xadConvName.c 1.0 (24.09.2000)
  9.     Author:        SDI
  10.     Distribution:    Freeware
  11.     Description:    name extension conversion function
  12.  
  13.  1.0   24.09.00 : first version
  14. */
  15.  
  16. #define SDI_TO_ANSI
  17. #include "SDI_ASM_STD_protos.h"
  18. #include <stdarg.h>
  19.  
  20. /*
  21.  Arguments are extension in form
  22.    old, new, old, new, old, new, 0
  23.  If there is no new extension, 0 may be specified.
  24.  Extensions should be lower case.
  25.  Example:
  26.  nsize = xadConvName(buf, 256, ai->xai_InName, ".gz", 0, ".tgz", ".tar", ".adz", ".adf", 0);
  27. */
  28.  
  29. static ULONG xadConvName(STRPTR buf, ULONG bufsize, STRPTR name, ...)
  30. {
  31.   va_list v;
  32.   ULONG i, j = 0, k, up = 0;
  33.   STRPTR ext;
  34.  
  35.   va_start(v, name);
  36.   i = strlen(name);
  37.   while((ext = va_arg(v, char *)))
  38.   {
  39.     j = strlen(ext);
  40.     if(j < i && !stricmp(name+i-j, ext))
  41.       break;
  42.     va_arg(v, char *);
  43.     j = 0;
  44.   }
  45.   for(k = j; k && (name[i-k] > 'z' || name[i-k] < 'a'); --k)
  46.     ;
  47.   if(!k)
  48.     up = 1;
  49.   for(k = 0; k < i-j && k < bufsize-1; ++k)
  50.     buf[k] = name[k];
  51.   if(ext && (ext = va_arg(v, char *)))
  52.   {
  53.     for(; *ext && k < bufsize-1; ++k)
  54.     {
  55.       buf[k] = up ? toupper(*ext) : tolower(*ext);
  56.       ++ext;
  57.     }
  58.   }
  59.   va_end(v);
  60.   buf[k] = 0;
  61.   return k;
  62. }
  63.  
  64. #endif /* XADMASTER_XADCONVNAME_C */
  65.